home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / arm / plat-omap / include / mach / clockdomain.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  3.1 KB  |  107 lines

  1. /*
  2.  * linux/include/asm-arm/arch-omap/clockdomain.h
  3.  *
  4.  * OMAP2/3 clockdomain framework functions
  5.  *
  6.  * Copyright (C) 2008 Texas Instruments, Inc.
  7.  * Copyright (C) 2008 Nokia Corporation
  8.  *
  9.  * Written by Paul Walmsley
  10.  *
  11.  * This program is free software; you can redistribute it and/or modify
  12.  * it under the terms of the GNU General Public License version 2 as
  13.  * published by the Free Software Foundation.
  14.  */
  15.  
  16. #ifndef __ASM_ARM_ARCH_OMAP_CLOCKDOMAIN_H
  17. #define __ASM_ARM_ARCH_OMAP_CLOCKDOMAIN_H
  18.  
  19. #include <mach/powerdomain.h>
  20. #include <mach/clock.h>
  21. #include <mach/cpu.h>
  22.  
  23. /* Clockdomain capability flags */
  24. #define CLKDM_CAN_FORCE_SLEEP            (1 << 0)
  25. #define CLKDM_CAN_FORCE_WAKEUP            (1 << 1)
  26. #define CLKDM_CAN_ENABLE_AUTO            (1 << 2)
  27. #define CLKDM_CAN_DISABLE_AUTO            (1 << 3)
  28.  
  29. #define CLKDM_CAN_HWSUP        (CLKDM_CAN_ENABLE_AUTO | CLKDM_CAN_DISABLE_AUTO)
  30. #define CLKDM_CAN_SWSUP        (CLKDM_CAN_FORCE_SLEEP | CLKDM_CAN_FORCE_WAKEUP)
  31. #define CLKDM_CAN_HWSUP_SWSUP    (CLKDM_CAN_SWSUP | CLKDM_CAN_HWSUP)
  32.  
  33. /* OMAP24XX CM_CLKSTCTRL_*.AUTOSTATE_* register bit values */
  34. #define OMAP24XX_CLKSTCTRL_DISABLE_AUTO        0x0
  35. #define OMAP24XX_CLKSTCTRL_ENABLE_AUTO        0x1
  36.  
  37. /* OMAP3XXX CM_CLKSTCTRL_*.CLKTRCTRL_* register bit values */
  38. #define OMAP34XX_CLKSTCTRL_DISABLE_AUTO        0x0
  39. #define OMAP34XX_CLKSTCTRL_FORCE_SLEEP        0x1
  40. #define OMAP34XX_CLKSTCTRL_FORCE_WAKEUP        0x2
  41. #define OMAP34XX_CLKSTCTRL_ENABLE_AUTO        0x3
  42.  
  43. /*
  44.  * struct clkdm_pwrdm_autodep - a powerdomain that should have wkdeps
  45.  * and sleepdeps added when a powerdomain should stay active in hwsup mode;
  46.  * and conversely, removed when the powerdomain should be allowed to go
  47.  * inactive in hwsup mode.
  48.  */
  49. struct clkdm_pwrdm_autodep {
  50.  
  51.     /* Name of the powerdomain to add a wkdep/sleepdep on */
  52.     const char *pwrdm_name;
  53.  
  54.     /* Powerdomain pointer (looked up at clkdm_init() time) */
  55.     struct powerdomain *pwrdm;
  56.  
  57.     /* OMAP chip types that this clockdomain dep is valid on */
  58.     const struct omap_chip_id omap_chip;
  59.  
  60. };
  61.  
  62. struct clockdomain {
  63.  
  64.     /* Clockdomain name */
  65.     const char *name;
  66.  
  67.     /* Powerdomain enclosing this clockdomain */
  68.     const char *pwrdm_name;
  69.  
  70.     /* CLKTRCTRL/AUTOSTATE field mask in CM_CLKSTCTRL reg */
  71.     const u16 clktrctrl_mask;
  72.  
  73.     /* Clockdomain capability flags */
  74.     const u8 flags;
  75.  
  76.     /* OMAP chip types that this clockdomain is valid on */
  77.     const struct omap_chip_id omap_chip;
  78.  
  79.     /* Usecount tracking */
  80.     atomic_t usecount;
  81.  
  82.     /* Powerdomain pointer assigned at clkdm_register() */
  83.     struct powerdomain *pwrdm;
  84.  
  85.     struct list_head node;
  86.  
  87. };
  88.  
  89. void clkdm_init(struct clockdomain **clkdms, struct clkdm_pwrdm_autodep *autodeps);
  90. int clkdm_register(struct clockdomain *clkdm);
  91. int clkdm_unregister(struct clockdomain *clkdm);
  92. struct clockdomain *clkdm_lookup(const char *name);
  93.  
  94. int clkdm_for_each(int (*fn)(struct clockdomain *clkdm));
  95. struct powerdomain *clkdm_get_pwrdm(struct clockdomain *clkdm);
  96.  
  97. void omap2_clkdm_allow_idle(struct clockdomain *clkdm);
  98. void omap2_clkdm_deny_idle(struct clockdomain *clkdm);
  99.  
  100. int omap2_clkdm_wakeup(struct clockdomain *clkdm);
  101. int omap2_clkdm_sleep(struct clockdomain *clkdm);
  102.  
  103. int omap2_clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk);
  104. int omap2_clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk);
  105.  
  106. #endif
  107.